#ifndef TRADE_LEVEL_DATA_H
#define TRADE_LEVEL_DATA_H

//#include "../../tools/StringTools.h"
#include "Tools.h"

///银行数组最大个数
#define TRADELV_BANK_MAXCOUNT		16
///字符串最大长度
#define	TRADELV_STRING_LEN			128

///交易包头长度
#define TRADELV_HEADER_ASK_LEN 80

//========================================================================================
//交易请求包
//========================================================================================
///交易请求包头结构
typedef struct TRADELV_HEADER_ASK_tag 
{
    ///协议号（当前固定为字符串： KSTOCK）
	char ProtocolID [7];
    ///版本号（当前固定为字符串： 10）
	char VersionID [3];
    ///发起方。该包是由哪一方发送的。//C(lient)/S(erver)
	char PackFlag [2];
    ///交易业务包的类型。只有请求包和应答包两种//R(equest)/A(nswer)
	char PackType [2];
    ///是否有下一页的数据。当使用手机端对端加密时，每次请求都赋为’1’。//（‘0’：无 ‘1’：有）
	char NextPages [2];
    ///客户端代码。//该代码由中国移动统一给各个券商进行分配，其格式为“券商代码（3位）+营业部代码（3位）”。
	char ClientId [7];
    ///包流水号。(前11位为手机号码，如果没传输则置11个0)//如果是客户端发起则由客户端提供，反之由券商端提供。
	char SerialNo [25];
    ///功能调用码。//（详见包体定义部分）
	char TransCode [3];
    ///应答方：本包中所包含的记录总数。请求方：表明要请求的是第几页的数据。从1开始。
	char RecCount [5];
    ///是否有后续包标志。（保留，固定为‘0’）
	char NextPacket [2];
    ///（保留）当使用手机端对端加密的时候，用来传送会话ID。
	char Reserved [17];
    ///包体的长度。
	char PackLen [5];
}TRADELV_HEADER_ASK;
//========================================================================================

//========================================================================================
//交易应答包
//========================================================================================

///交易返回状态码枚举
enum TStatusCode_tag
{
    ///请求处理成功
	STATUSCODE_SUC			= 0,
    ///请求处理失败
	STATUSCODE_FAIL			= 1,
    ///请求处理超时
	STATUSCODE_TIMEOUT		= 1001,
    ///与柜台服务器通信发生故障
	STATUSCODE_TRADEFAULT	= 1002,
    ///与行情服务器通信发生故障
	STATUSCODE_QUOTEFAULT	= 1001,
    ///未开此项业务
	STATUSCODE_NOOPEN		= 1001,
}TStatusCode;

///页码枚举
enum TPageTag_tag
{
    ///仅有下一页（第一页）
	PAGE_NEXT			= -1,
    ///仅有上一页（最后一页）
	PAGE_PRE			= 1,
    ///既有上一页，也有下一页
	PAGE_NEXTORPRE		= 0,
    ///既没有上一页，也没有下一页
	PAGE_NONEXTORPRE	= 2,
}TPageTag;

///交易应答包头
typedef struct TRADELV_HEADER_RES_tag 
{
    ///交易包头
	TRADELV_HEADER_ASK	Res;
    ///状态码（请查看TCodeStatus枚举）
	char				StatusCode[8];
    ///状态信息描述
	char				Msg[512];
    ///页码标志 （请查看TPagTag枚举）
	int					nPageTag;
    //交易包体
	ROW_NODE			*pData;
}TRADELV_HEADER_RES;


//========================================================================================


/**解析验证码
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */

void TradeLvData_ParseIdentifyCodeData(ROW_NODE* aNode, char* aIdentifyCode);


//========================================================================================
//登录结构包
//========================================================================================

#define TRADELV_ACCOUNT_MAXCOUNT	20
#define	TRADELV_ACCOUNT_LEN			32

///股东账号结构
typedef struct TRADELV_ACCOUNT_tag
{
    ///名称
	char sName[TRADELV_ACCOUNT_LEN];
    ///账号
	char sNum[TRADELV_ACCOUNT_LEN];
}TRADELV_ACCOUNT;

///登录应答结构
typedef struct TRADELV_LOGIN_RES_tag 
{
    ///帐号种类个数
	int					nCount;
    ///状态码（请查看TCodeStatus枚举）
	TRADELV_ACCOUNT		pAccount[TRADELV_ACCOUNT_MAXCOUNT];
    ///资金帐号
	char				pCapitalAccount[TRADELV_ACCOUNT_LEN];
    ///公告内容（如果长度为0：没有公告）
	char				pNotice[MAX_PATH];
		///风险提示
	char				pRiskInfo[MAX_LENG_PATH];
		///缓存信息索引
	short				nLoginResIndex;
		///流水号
	int					nSerNum;
}TRADELV_LOGIN_RES;

/**解析登录
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */

void TradeLvData_ParseLoginData(ROW_NODE* aNode, TRADELV_LOGIN_RES *aRes);
//========================================================================================


//========================================================================================
//银行代码解析
//========================================================================================

///银行结构
typedef struct TRADELV_BANKITEM_tag
{
    ///代码
	char	iBankID[TRADELV_STRING_LEN];
    ///名字
	char	iBankName[TRADELV_STRING_LEN];
    ///帐号
	char	iBankAccount[TRADELV_STRING_LEN];
    ///类别
	char	iBankType[TRADELV_STRING_LEN];
    ///币种
	char	iBankMoneyType[TRADELV_STRING_LEN];
    ///类型
	char	iBankMode[TRADELV_STRING_LEN];
    ///银行密码标志
	char	iBankPassStatus[TRADELV_STRING_LEN];
    ///转入密码标志
	char	iBankPassIn[TRADELV_STRING_LEN];
    ///转出密码标志
	char	iBankPassOut[TRADELV_STRING_LEN];
	///余额密码标志
	char	iBankBanlance[TRADELV_STRING_LEN];
	///对应的资金帐号
	char	iFundAccount[TRADELV_STRING_LEN];
	///可取金额
	char	iMoney[TRADELV_STRING_LEN];
}TRADELV_BANKITEM;

///银行应答结构
typedef struct TRADELV_BANKCODE_RES_tag 
{
    ///银行个数
	int						nCount;
    ///银行结构数组
	TRADELV_BANKITEM		pBank[TRADELV_BANK_MAXCOUNT];
}TRADELV_BANKCODE_RES;

/**解析登录
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */
void TradeLvData_ParseBankCodeData(ROW_NODE* aNode, TRADELV_BANKCODE_RES *aRes);
//========================================================================================


//========================================================================================
//买卖委托解析
//========================================================================================


///买卖委托结构
typedef struct TRADELV_BUYSELL_RES_tag 
{
    ///股票代码
	char				StkCode[TRADELV_STRING_LEN];
    ///股票名称
	char				StkName[TRADELV_STRING_LEN];
    ///市场代码
	char				MarketId[TRADELV_STRING_LEN];
    ///市场类别
	char				MarketType[TRADELV_STRING_LEN];
    ///可买数量
	char				BuyNum[TRADELV_STRING_LEN];
    ///可卖数量
	char				SellNum[TRADELV_STRING_LEN];
    ///可用金额
	char				Money[TRADELV_STRING_LEN];
    ///最近价格
	char				CurPri[TRADELV_STRING_LEN];
    ///昨收
	char				ZSPri[TRADELV_STRING_LEN];
    ///卖5价
	char				SPri5[TRADELV_STRING_LEN];
    ///卖5量
	char				SVol5[TRADELV_STRING_LEN];
    ///卖4价
	char				SPri4[TRADELV_STRING_LEN];
    ///卖4量
	char				SVol4[TRADELV_STRING_LEN];
    ///卖3价
	char				SPri3[TRADELV_STRING_LEN];
    ///卖3量
	char				SVol3[TRADELV_STRING_LEN];
    ///卖2价
	char				SPri2[TRADELV_STRING_LEN];
    ///卖2量
	char				SVol2[TRADELV_STRING_LEN];
    ///卖1价
	char				SPri1[TRADELV_STRING_LEN];
    ///卖1量
	char				SVol1[TRADELV_STRING_LEN];
    ///买1价
	char				BPri1[TRADELV_STRING_LEN];
    ///买1量
	char				BVol1[TRADELV_STRING_LEN];
    ///买2价
	char				BPri2[TRADELV_STRING_LEN];
    ///买2量
	char				BVol2[TRADELV_STRING_LEN];
    ///买3价
	char				BPri3[TRADELV_STRING_LEN];
    ///买3量
	char				BVol3[TRADELV_STRING_LEN];
    ///买4价
	char				BPri4[TRADELV_STRING_LEN];
    ///买4量
	char				BVol4[TRADELV_STRING_LEN];
    ///买5价
	char				BPri5[TRADELV_STRING_LEN];
    ///买5量
	char				BVol5[TRADELV_STRING_LEN];
    ///涨停
	char				ZT[TRADELV_STRING_LEN];
    ///跌停
	char				DT[TRADELV_STRING_LEN];
    ///涨幅
	char				ZF[TRADELV_STRING_LEN];
	///最小变动单位
	char				MinUnit[TRADELV_STRING_LEN];
	///股东代码			
	char				StockHolderAccount[TRADELV_STRING_LEN];
	///认购上限
	char				SubscribeMax[TRADELV_STRING_LEN];
	///申购上限
	char				SubscribeAppMax[TRADELV_STRING_LEN];
	///赎回上限
	char				RansomMax[TRADELV_STRING_LEN];
	///现手
	char				CurrentVol[TRADELV_STRING_LEN];
  ///风险提示
  char				pRiskInfoSB[MAX_LENG_PATH];
  ///当前汇率
  char				CurrentExchangeRate[TRADELV_STRING_LEN];
  ///每手股数
  char				MinGuShu[TRADELV_STRING_LEN];
  ///最小价差
  char				MinJiaCha[TRADELV_STRING_LEN];
}TRADELV_BUYSELL_RES;

/**解析登录
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */
void TradeLvData_ParseBuySellData(ROW_NODE* aNode, TRADELV_BUYSELL_RES *aRes);
//========================================================================================

//========================================================================================
//多资金账号查询

///多资金账号结构
typedef struct TRADELV_ACCOUNTITEM_tag
{
    ///资金账号
	char	iAccount[TRADELV_STRING_LEN];
    ///账号名称
	char	iAccountName[TRADELV_STRING_LEN];
    ///账号类别
	char	iAccountType[TRADELV_STRING_LEN];
    ///币种
	char	iAccountMoneyType[TRADELV_STRING_LEN];
    ///可取金额
	char	iMoney[TRADELV_STRING_LEN];
	
}TRADELV_ACCOUNTITEM;

///多资金账号结构
typedef struct TRADELV_ACCOUNTCODE_RES_tag 
{
    ///资金账号个数
	int						nCount;
	///主资金索引
	int						nIndex;
    ///银行结构数组
	TRADELV_ACCOUNTITEM		pAccount[TRADELV_BANK_MAXCOUNT];
}TRADELV_ACCOUNTCODE_RES;


/**解析登录
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */
void TradeLvData_ParseAccountCodeData(ROW_NODE* aNode, TRADELV_ACCOUNTCODE_RES *aRes);
//========================================================================================

//========================================================================================
//联系人查询

///联系人信息结构
typedef struct TRADELV_CONTACT_RES_tag 
{
	////联系人
	char	iContactMan[TRADELV_STRING_LEN];
	////家庭电话
	char	iPhone[TRADELV_STRING_LEN];
	////移动电话
	char	iMobile[TRADELV_STRING_LEN];
	////地址
	char	iAddress[TRADELV_STRING_LEN];
	////邮编
	char	iZipCode[TRADELV_STRING_LEN];
	////电子邮箱
	char	iEmial[TRADELV_STRING_LEN];
	
}TRADELV_CONTACT_RES;


/**解析联系人
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */
void TradeLvData_ParseContactData(ROW_NODE* aNode, TRADELV_CONTACT_RES *aRes);
//========================================================================================

//========================================================================================
//融资融券需还款额查询
//========================================================================================

///还款额结构
typedef struct TRADELV_PAYMENTITEM_tag
{
    ///币种
	char	iMoneyType[TRADELV_STRING_LEN];
    ///可用金额
	char	iMayAccount[TRADELV_STRING_LEN];
    ///需还金额
	char	iAlsoAccount[TRADELV_STRING_LEN];
    ///应还本金
	char	iAlsoPrincipal[TRADELV_STRING_LEN];
    ///应还利息
	char	iAlsoInterest[TRADELV_STRING_LEN];
    ///融资费用
	char	iFinancingCosts[TRADELV_STRING_LEN];
	///资金余额
	char	iAccountBalace[TRADELV_STRING_LEN];
}TRADELV_PAYMENTITEM;

///还款额查询应答结构
typedef struct TRADELV_PAYMENT_RES_tag 
{
    ///个数
	int						nCount;
    ///还款额数组
	TRADELV_PAYMENTITEM		pPayMents[TRADELV_BANK_MAXCOUNT];
}TRADELV_PAYMENT_RES;

/**解析还款额查询
 *
 *  @param －		
 *
 *  @return -
 *
 *		
 */
void TradeLvData_ParsePaymentData(ROW_NODE* aNode, TRADELV_PAYMENT_RES *aRes);
//========================================================================================

void TradeLvData_SetCurrentLanguage(int aLanguageType);

#endif
